package com.trg.generaltool.util.http;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * HTTP协议通信工具类
 * @author tangrg
 * @version 1.0
 */
public class HttpClientUtil {
	 private static final CloseableHttpClient httpClient;
	    public static final String CHARSET = "UTF-8";
	 
	    static {
	        RequestConfig config = RequestConfig.custom().setConnectTimeout(60000).setSocketTimeout(6000000).build();
	        httpClient = HttpClientBuilder.create().setDefaultRequestConfig(config).build();
	    }
	 
	    public static String doGet(String url, Map<String, String> params){
	        return doGet(url, params,CHARSET);
	    }
	    public static String doPost(String url, Map<String, String> params){
	        return doPost(url, params,CHARSET);
	    }
	    public static String doPost2(String url, Map<String, Object> params){
	        return doPost2(url, params,CHARSET);
	    }
	   
	    /**
	     * HTTP Get 获取内容
	     * @param url  请求的url地址 ?之前的地址
	     * @param params 请求的参数
	     * @param charset    编码格式
	     * @return    页面内容
	     */
	    public static String doGet(String url,Map<String,String> params,String charset){
	        if(url.isEmpty()){
	            return null;
	        }
	        try {
	            if(params != null && !params.isEmpty()){
	                List<NameValuePair> pairs = new ArrayList<NameValuePair>(params.size());
	                for(Map.Entry<String,String> entry : params.entrySet()){
	                    String value = entry.getValue();
	                    if(value != null){
	                        pairs.add(new BasicNameValuePair(entry.getKey(),value));
	                    }
	                }
	                url += "?" + EntityUtils.toString(new UrlEncodedFormEntity(pairs, charset));
	            }
	            HttpGet httpGet = new HttpGet(url);
	            CloseableHttpResponse response = httpClient.execute(httpGet);
	            int statusCode = response.getStatusLine().getStatusCode();
	            if (statusCode != 200) {
	                httpGet.abort();
	                throw new RuntimeException("HttpClient,error status code :" + statusCode);
	            }
	            HttpEntity entity = response.getEntity();
	            String result = null;
	            if (entity != null){
	                result = EntityUtils.toString(entity, "utf-8");
	            }
	            EntityUtils.consume(entity);
	            response.close();
	            return result;
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	        return null;
	    }
	     
	    /**
	     * HTTP Post 获取内容
	     * @param url  请求的url地址
	     * @param params 请求的参数
	     * @param charset    编码格式
	     * @return    页面内容
	     */
	    public static String doPost(String url,Map<String,String> params,String charset){
	    	if(url.isEmpty()){
		            return null;
		    }
	        try {
	            List<NameValuePair> pairs = null;
	            if(params != null && !params.isEmpty()){
	                pairs = new ArrayList<NameValuePair>(params.size());
	                for(Map.Entry<String,String> entry : params.entrySet()){
	                    String value = entry.getValue();
	                    if(value != null){
	                        pairs.add(new BasicNameValuePair(entry.getKey(),value));
	                    }
	                }
	            }
	            HttpPost httpPost = new HttpPost(url);
	            if(pairs != null && pairs.size() > 0){
	                httpPost.setEntity(new UrlEncodedFormEntity(pairs,CHARSET));
	            }
	            CloseableHttpResponse response = httpClient.execute(httpPost);
	            int statusCode = response.getStatusLine().getStatusCode();
	            if (statusCode != 200) {
	                httpPost.abort();
	                throw new RuntimeException("HttpClient,error status code :" + statusCode);
	            }
	            HttpEntity entity = response.getEntity();
	            String result = null;
	            if (entity != null){
	                result = EntityUtils.toString(entity, "utf-8");
	            }
	            EntityUtils.consume(entity);
	            response.close();
	            return result;
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	        return null;
	    }
	    public static String doPost2(String url,Map<String,Object> params,String charset){
	    	if(url.isEmpty()){
		            return null;
		    }
	        try {
	            List<NameValuePair> pairs = null;
	            if(params != null && !params.isEmpty()){
	                pairs = new ArrayList<NameValuePair>(params.size());
	                for(Map.Entry<String,Object> entry : params.entrySet()){
	                    String value = entry.getValue().toString();
	                    if(value != null){
	                        pairs.add(new BasicNameValuePair(entry.getKey(),value));
	                    }
	                }
	            }
	            HttpPost httpPost = new HttpPost(url);
	            if(pairs != null && pairs.size() > 0){
	                httpPost.setEntity(new UrlEncodedFormEntity(pairs,CHARSET));
	            }
	            CloseableHttpResponse response = httpClient.execute(httpPost);
	            int statusCode = response.getStatusLine().getStatusCode();
	            if (statusCode != 200) {
	                httpPost.abort();
	                throw new RuntimeException("HttpClient,error status code :" + statusCode);
	            }
	            HttpEntity entity = response.getEntity();
	            String result = null;
	            if (entity != null){
	                result = EntityUtils.toString(entity, CHARSET);
	            }
	            EntityUtils.consume(entity);
	            response.close();
	            return result;
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	        return null;
	    }

	    
	    public static void main(String []args){
	       //String getData = doGet("http://www.baidu.com/",null);
	       //System.out.println(getData);
	       //System.out.println("----------------------分割线-----------------------");
//	        String postData = doPost("http://www.oschina.net/",null);
//	        System.out.println(postData);
	    	Map<String, String> params = new HashMap<String,String>();
	    	params.put("fileTime", "20200829");
	    	params.put("size", "1");
	    	params.put("time", "20200829");
	    	params.put("type", "pre");

//			{"fileTime":"20200829","size":"1","time":"20200829","type":"pre"}
	        String postData = doPost("http://localhost:8080/FCST_NX/resources/rest/climate/forecast/ep/getMosResults",params);
	        System.out.println(postData);
	        
	        
	    	
	    	
	    }

}
